#_*_ coding:utf8 _*_
import subprocess       # 调用操作系统命令
import logging          # 日志模块
## 如果日志实例不存在，就使用本程序日志模块
Log = logging.getLogger("__name__")
if not logging.FileHandler:
    formatter = logging.Formatter('%(asctime)s %(levelname)-8s : %(message)s')  # 指定logger输出格式
    file_handler = logging.FileHandler("DEV_SNMP.log")                          # 日志文件路径
    file_handler.setFormatter(formatter)                                        # 可以通过setFormatter指定输出格式
    Log.addHandler(file_handler)
    Log.setLevel(logging.DEBUG)

'''
说明：以下函数是通过 Python3 subprocess 模块调用系统命令实现操作SNMP的功能
前提条件1：系统需要先安装好SNMP工具，有查询和修改SNMP的命令
安装SNMP命令：以 CentOS7 系统为例
    yum install net-snmp-utils  # 安装SNMP工具
    安装后就会有如下命令
    snmpbulkwalk                # 用于SNMP查询值
    snmpset                     # 用于SNMP修改值

前提条件2：被管理设备上要开启SNMP功能，以华为模拟器S5700交换机为例：
    system-view                         # 进入配置模式
    snmp-agent                          # 配置SNMP
    snmp-agent sys-info version v2c     # 设置SNMP版本
    snmp-agent community read pwd@123   # 设置只读SNMP密码
    snmp-agent community write pwd@456  # 设置修改SNMP密码
    snmp-agent udp-port 161             # 设置SNMP端口，默认就是 UDP 161
'''


## SNMP v2c 版本查询功能
def SNMP_V2_R(SNMP_PWD, SNMP_HOST, SNMP_OID):
    SNMP_CMD = 'snmpbulkwalk -v 2c -c ' + SNMP_PWD + ' ' + SNMP_HOST + ' ' + SNMP_OID
    RR = subprocess.getstatusoutput(SNMP_CMD)
    Log.debug('函数 SNMP_V2_R 执行了系统命令 ' + SNMP_CMD)    ## DEBUG
    Log.debug('命令执行结果 ' + str(RR))                      ## DEBUG
    return(RR)

## SNMP v2c 版本设置功能
def SNMP_V2_W(SNMP_PWD, SNMP_HOST, SNMP_OID, SNMP_TYPE, SNMP_VALUE):
    SNMP_CMD = 'snmpset -v 2c -c '+ SNMP_PWD +' '+ SNMP_HOST +' '+ SNMP_OID +' '+ SNMP_TYPE +' '+ SNMP_VALUE
    RR = subprocess.getstatusoutput(SNMP_CMD)
    Log.debug('函数 SNMP_V2_W 执行了系统命令 ' + SNMP_CMD)    ## DEBUG
    Log.debug('命令执行结果 ' + str(RR))                      ## DEBUG
    return(RR)
